﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Dados_;
using System.ComponentModel;

namespace Negocios
{
    [DataObject]
    public class UsuarioBoMetodos
    {
        [DataObjectMethod(DataObjectMethodType.Insert, true)]
        public bool Inserir(UsuarioBO usuario)
        {
            UsuariosSQL usuarioSQL = new UsuariosSQL();

            if (usuarioSQL.Consultar(usuario.Login) != null)
            {
                throw new BOException("Login já existente!");
            }
            else
            {
                UsuariosVO usuarioVo = new UsuariosVO();

                usuarioVo.Login = usuario.Login;
                usuarioVo.Nome = usuario.Nome;
                usuarioVo.Email = usuario.Email;
                usuarioVo.Senha = usuario.Senha;
                usuarioVo.Tipo = usuario.Tipo;

                return (new UsuariosSQL().Inserir(usuarioVo) == 1);
            }
        }
        
        public bool Excluir(UsuarioBO usuario)
        {
            UsuariosVO usuarioVo = new UsuariosVO();

            usuarioVo.Login = usuario.Login;
            usuarioVo.Email = usuario.Email;
            usuarioVo.Senha = usuario.Senha;
            usuarioVo.Tipo = usuario.Tipo;

            return (new UsuariosSQL().Excluir(usuarioVo) == 1);
        }
        
        public bool Alterar(UsuarioBO usuario)
        {
            UsuariosSQL usuarioSQL = new UsuariosSQL();

            UsuariosVO usuarioVo = new UsuariosVO();

            usuarioVo.Nome = usuario.Nome;
            usuarioVo.Login = usuario.Login;
            usuarioVo.Email = usuario.Email;
            usuarioVo.Senha = usuario.Senha;
            usuarioVo.Tipo = usuario.Tipo;

            return (new UsuariosSQL().Alterar(usuarioVo) == 1);
        }

        public UsuarioBO Consultar(UsuarioBO usuario)
        {
            UsuarioBO usuarioBo  = new UsuarioBO();
            UsuariosVO usuarioVo = new UsuariosSQL().Consultar(usuario.Login);

            usuarioBo.Login = usuarioVo.Login.Trim();
            usuarioBo.Nome = usuarioVo.Nome.Trim();
            usuarioBo.Email = usuarioVo.Email.Trim();
            usuarioBo.Senha = usuarioVo.Senha.Trim();
            usuarioBo.Tipo = usuarioVo.Tipo;

            return usuarioBo;
        }
        
        public List<UsuarioBO> Consultar(string nome, int tipo)
        {
            List<UsuarioBO>  usuariosBo = new List<UsuarioBO>();
            List<UsuariosVO> usuariosVo = new UsuariosSQL().Consultar(nome, tipo);

            foreach (UsuariosVO usuarioVo in usuariosVo)
            {
                UsuarioBO usuarioBo = new UsuarioBO();
                
                usuarioBo.Login = usuarioVo.Login.Trim();
                usuarioBo.Nome  = usuarioVo.Nome.Trim();
                usuarioBo.Email = usuarioVo.Email.Trim();
                usuarioBo.Senha = usuarioVo.Senha.Trim();
                usuarioBo.Tipo  = usuarioVo.Tipo;


                switch (usuarioBo.Tipo)
                {
                    case 0:
                        usuarioBo.TipoString = "Gerente";
                        break;
                    case 1:
                        usuarioBo.TipoString = "Funcionario";
                        break;
                    case 2:
                        usuarioBo.TipoString = "Cliente";
                        break;
                }
    
                usuariosBo.Add(usuarioBo);
            }
            return usuariosBo;
        }
        
        public Boolean Autenticar(UsuarioBO usuario)
        {
            UsuariosVO usuarioVo = new UsuariosSQL().Consultar(usuario.Login);

            return usuarioVo.Senha == usuario.Senha;
        }
    }
}
